/**
 * @Title:
 * @Description:
 * Copyright 2018 GemFrame技术团队 http://www.gemframe.cn
 * Company: DianShiKongJian (Beijing) Technology Co., Ltd.
 * @author Ryan
 * @date 2018-11-1 16:06:06
 * @version V1.0
 *
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * <p>
 * http://www.apache.org/licenses/LICENSE-2.0
 * <p>
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package cn.gemframe.config.websocket;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistration;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;

/**
 * @Title:
 * @Description:
 * @author Ryan
 * @date 2018-11-1 16:06:06
 * @version V1.0
 */
@Slf4j
@Configuration
@EnableWebSocket
public class GemWebSocketConfig implements WebSocketConfigurer {
	
	/**
	 * 设置连接地址和拦截器
	 */
	@Override
	public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
		log.info("1111111111111111111111111111111111111");
		// 设置websocket的连接地址
		WebSocketHandlerRegistration addHandler = registry.addHandler(webSocketMessage(), "/");
		// 设置websocket的拦截器
		WebSocketHandlerRegistration addInterceptors = addHandler.addInterceptors(new GemWebSocketInterceptor());
		// 设置跨域请求
		addInterceptors.setAllowedOrigins("*");
	}

	/**
	 * 配置消息处理器
	 */
	@Bean
	public GemWebSocketMessage webSocketMessage() {
		GemWebSocketMessage gemWebSocketMessage = new GemWebSocketMessage();
		return gemWebSocketMessage;
	}

	/**
	 * 配置消息缓冲时间和session的超市时间
	 */
	@Bean
	public ServletServerContainerFactoryBean servletServerContainerFactoryBean() {
		ServletServerContainerFactoryBean servletServerContainerFactoryBean = new ServletServerContainerFactoryBean();
		servletServerContainerFactoryBean.setMaxTextMessageBufferSize(8192);
		servletServerContainerFactoryBean.setMaxBinaryMessageBufferSize(8192);
		servletServerContainerFactoryBean.setMaxSessionIdleTimeout(1200000);
		return servletServerContainerFactoryBean;
	}

}
